import {Router} from "vue-router";
import {StoreDefinition} from "pinia";
import {FileResult} from "@/entityType/FileResult";

export type PluginType =
  'fileIcon' | // 文件icon的类型，返回的结果是直接给 vue内置组件component:is=
  'file' | // 文件类型，打开文件的时候调用 返回的结果是直接给 vue内置组件component:is=可以是异步的 组件使用公共props import {CommonPropsMixin} from "@/views/dashboard/CommonPropsMixin";
  'route' // 路由类型，路由准备好以后再一次调用

export type PagePluginItemHandlerParam2 = FileResult |
  Router |
  string

export type PagePluginItemHandlerResult = void |
  string |
  Object

export interface PagePluginItem {
  type: PluginType;
  handler: (pagePlugin: PagePlugin, param2?: PagePluginItemHandlerParam2) => PagePluginItemHandlerResult | Promise<PagePluginItemHandlerResult>;
}

export interface PagePlugin {
  // 主程序里面主动调用才是对的，所以要有插件类型分类，在主程序里面各个需要调用插件的位置去使用
  plugins: PagePluginItem[];
  router: Router;
  stores: Record<string, Record<string, StoreDefinition>>;
  pageLayout: () => Promise<typeof import("*.vue")>
}
